import { createStore ,applyMiddleware } from 'redux'

// apply 接受  Middleware中间件/插件

// 引入 redux-thunk 允许我们在dispatch传入一个普通的函数  并让该函数得到一个 dispatch对象
import thunk from 'redux-thunk';

// create 创建  store 存储   => createStore 创建出一个存储对象
// createStore 的第一个参数是一个reducer函数(迭代函数)
// redux就是通过 这个 reducer函数来更新维护全局共享的数据

// 初始状态
const initState = {
  version:1,
  cart:[],
  userInfo:{
    name:'dixon',
    balance:10
  }
}

const reducer =    (state = initState,action)=>{
  // action就是dispatch执行的时候传递的值

  console.log('action 长什么样子', action);
  // 因为redux已经规定了action当中有一个type属性
  // 所以我们一般就是根据这个type决定我们的修改逻辑
  const { type,payload } = action;
  if(type === 'updateVersion'){
      state.version = state.version + 1
  }

  if(type === '加入到购物车'){
      state.cart.push(payload);
  }

  if(type ==='更新用户信息'){
      state.userInfo = payload
  }

  // 通过reducer返回的值来更新 全局共享的数据
  return {...state};
}

const store = createStore(reducer, applyMiddleware(thunk) ); 

//  约定约定约定！！！ 为了更规范的规划我们的redux 上面的 迭代函数当中有什么type 我就生成一个对应的actionCreator
const actions = {
  updateVersion(){
    return { type: 'updateVersion'}
  },
  加入到购物车(payload){
    return { type:'加入到购物车', payload }
  },
  更新用户信息(payload){
    return { type:'更新用户信息', payload}
  }
}

export const {updateVersion,加入到购物车,更新用户信息 }  = actions



export default store;